﻿using CREAPA.Dominio;
using CREAPA.Repositorio;
using System;
using System.Collections.Generic;
using System.Data.SqlClient;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace CREAPA.RepositorioADO
{
    public class AssuntoPortariaRepositorioADO
    {
        private Contexto contexto;

        private void Inserir(AssuntoPortaria assuntoPortaria)
        {
            var strQuery = "";
            strQuery += " INSERT INTO AssuntoPortaria (descricao)";
            strQuery += string.Format(" values ('{0}')", assuntoPortaria.Descricao);
            using (contexto = new Contexto())
            {
                contexto.ExecutaComando(strQuery);
            }
        }
        private void Alterar(AssuntoPortaria assuntoPortaria)
        {
            var strQuery = "";
            strQuery += "UPDATE AssuntoPortaria SET ";
            strQuery += string.Format(" Descricao='{0}' ", assuntoPortaria.Descricao);
            strQuery += string.Format(" WHERE Id={0} ", assuntoPortaria.Id);
            using (contexto = new Contexto())
            {
                contexto.ExecutaComando(strQuery);
            }
        }

        public void Salvar(AssuntoPortaria assuntoPortaria)
        {
            if (assuntoPortaria.Id > 0)
            {
                Alterar(assuntoPortaria);
            }
            else
            {
                Inserir(assuntoPortaria);
            }
        }

        public void Excluir(int id)
        {
            using (contexto = new Contexto())
            {
                var strQuery = string.Format(" DELETE FROM AssuntoPortaria WHERE Id = {0}", id);
                contexto.ExecutaComando(strQuery);
            }
        }

        public AssuntoPortaria ListarPorId(int Id)
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format(" SELECT * FROM AssuntoPortaria WHERE Id = {0}", Id);
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader).FirstOrDefault();
            }
        }

        public IEnumerable<AssuntoPortaria> ListarAssuntoPortaria()
        {
            using (contexto = new Contexto())
            {
                var strQuery = String.Format(" Select * from AssuntoPortaria order by Descricao");
                var retornoDataReader = contexto.ExecutaComandoComRetorno(strQuery);
                return TransformaReaderEmListaDeObjeto(retornoDataReader);
            }
        }

        private List<AssuntoPortaria> TransformaReaderEmListaDeObjeto(SqlDataReader reader)
        {

            var assuntoPortaria = new List<AssuntoPortaria>();
            while (reader.Read())
            {
                var TemObjeto = new AssuntoPortaria()
                {
                    Id = int.Parse(reader["Id"].ToString()),
                    Descricao = reader["Descricao"].ToString()
                };
                assuntoPortaria.Add(TemObjeto);
            }
            reader.Close();
            return assuntoPortaria;
        }
    }
}
